import java.util.LinkedList;
import java.util.Queue;

public class MyStack {
    private Queue<Integer> queue1;
    private Queue<Integer> queue2;

    public MyStack() {
        // 初始化两个队列
        queue1 = new LinkedList<>();
        queue2 = new LinkedList<>();
    }

    // 将元素 x 压入栈顶
    public void push(int x) {
        // 直接将元素压入 queue1
        queue1.offer(x);
    }

    // 移除并返回栈顶元素
    public int pop() {
        // 将 queue1 中的元素逐个移到 queue2，直到剩下最后一个元素
        while (queue1.size() > 1) {
            queue2.offer(queue1.poll());
        }
        // 返回剩余的元素，即栈顶元素
        int topElement = queue1.poll();
        // 交换 queue1 和 queue2
        Queue<Integer> temp = queue1;
        queue1 = queue2;
        queue2 = temp;
        return topElement;
    }

    // 返回栈顶元素
    public int top() {
        // 将 queue1 中的元素逐个移到 queue2，直到剩下最后一个元素
        while (queue1.size() > 1) {
            queue2.offer(queue1.poll());
        }
        // 获取栈顶元素
        int topElement = queue1.peek();
        // 将栈顶元素加入 queue2，交换 queue1 和 queue2
        queue2.offer(queue1.poll());
        Queue<Integer> temp = queue1;
        queue1 = queue2;
        queue2 = temp;
        return topElement;
    }

    // 如果栈为空，返回 true，否则返回 false
    public boolean empty() {
        return queue1.isEmpty();
    }
}
